# 4. kubectl命令行管理工具

# kubectl命令行管理工具

JacOHA.png

JagBbd.png

# kubectl项目发布最常用的命令

就从最简单的创建项目,发布项目,更新项目,回滚项目,删除项目

# 创建项目

kubectl run nginx --replicas=3 --image=nginx:1.14 --port=80
## 创建的项目名为:nginx
## 节点为:3个
## 镜像为:nginx1.14版本镜像
## 内部端口为:80

kubectl get deploy,pods
## deploy:查看所有项目有几个节点
## pods:查看所有节点

# 发布项目

kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
## 暴露端口
	## 容器内部端口:80
	## 集群数据互通端口:88
## 服务类型:NodePort

kubectl get service
## 查看所有类型的大概信息

# 更新项目

kubectl set image deployment/nginx nginx=nginx:1.15

## 把nginx版本更新为1.15

# 回滚项目

kubectl rollout history deployment/nginx
kubectl rollout undo deployment/nginx

# 删除项目

kubectl delete deploy/nginx
kubectl delete svc/nginx-service

# kubectl常用命令

# 查看类命令

# 获取节点相应服务的信息

kubectl get nodes

# 获取pod的相关信息

kubectl get pods

# selector名来查找

如果需要按selector名来查找相应的pod信息, 可以通过以下命令查看

kubectl get pod --selector name=tomcat

# 查看K8S集群信息

kubectl cluster-info

## 查看完整信息
kubectl cluster-info dump

# 查看各组件信息

kubectl -s http://localhost:8080 get componentstatuses
kubectl get cs

# 查看pods(容器)所在的运行节点

kubectl get pods -o wide

# 通过某个命名空间查找节点信息

如果需要通过某个命名空间查找节点信息, 可以通过以下命令查看:

kubectl get pods -o wide -n kube-system

-o wide 选项表示展示更多的Pod节点信息
-n <命名空间> 表示查询该命名空间下的Pod节点信息

# 找所有命名空间的节点信息

如果需要查找所有命名空间下的所有Pod信息, 可以通过以下命令:

kubectl get pods --all-namespaces
或
kubectl get pods -o wide --all-namespaces #列出更多的详细信息

# 查看pods定义的详细信息

kubectl get pods -o yaml

# 查看运行的pod的环境变量

kubectl exec <pod名称> env
kubectl exec nginx-5c7588df-45gzq env

# 查看指定pod的日志

kubectl logs -f pods/<pod名称> -n kube-system

# 查看集群节点信息

kubectl get nodes
kubectl get node

# 集群名称为zone下的集群节点信息

如果需要查看集群名称为zone下的集群节点信息, 可以使用以下命令

kubectl get nodes -l zone

# 查看某个命名空间下的所有service

查看某个命名空间(如kube-system)下的所有service

kubectl get services kubernetes-dashboard -n kube-system

# 查看某个命名空间下的所有发布信息

查看某个命名空间(如kube-system)下的所有发布信息

kubectl get deployment kubernetes-dashboard -n kube-system

# 查看资源信息

# 根据service名查看资源信息

kubectl describe service/kubernetes-dashboard --namespace="kube-system"

# 根据pod名称查看资源信息

kubectl describe pods/kubernetes-dashboard-349859023-g6q8c --namespace="kube-system"
kubectl describe pod nginx-772ai

# 操作类命令

# 创建资源

kubectl create -f <文件名.yaml>

# 重建资源

kubectl replace -f <文件名 [--force]

# 删除资源

# 强制删除某个文件名命名节点

kubectl delete -f <文件名>

# 删除某个Pod命令节点

 kubectl delete pod <pod名>

# 删除某Replication Controller命名节点

 kubectl delete rc <rc名>

# 删除某个服务命名节点

 kubectl delete service <service名>

# 删除所有Pod节点

kubectl delete pod --all

# 动态伸缩操作

# 为某个名称为nginx动态扩展5个服务节点

为Replcation Controller名称为nginx动态扩展5个服务节点

kubectl scale rc nginx --replicas=5

# 为redis-slave部署5个服务节点

kubectl scale deployment redis-slave --replicas=5

# 为某个.yaml部署脚本的服务扩展2个节点

为redis-slave-deployment.yaml部署脚本下的服务扩展2个节点

kubectl scale --replicas=2 -f redis-slave-deployment.yaml

# 进入Pod节点容器内进行操作

kubectl exec -it redis-master-1033017107-q47hh /bin/bash

# Pods节点容器标签操作

# 增加Node节点label值

kubectl label nodes node1 zone=north

# 增加Pod的label值 [key]=[value]

kubectl label pod redis-master-1033017107-q47hh role=master

# 删除Pod的label值

kubectl label pod redis-master-1033017107-q47hh role-

# 修改Pod的label值

kubectl label pod redis-master-1033017107-q47hh role=backend --overwrite

# 滚动升级

# 配置文件滚动升级

kubectl rolling-update redis-master -f redis-master-controller-v2.yaml

# 命令升级

kubectl rolling-update redis-master --image=redis-master:2.0

# Pods版本回滚

kubectl rolling-update redis-master --image=redis-master:1.0 --rollback